perm filename WIXSUB.FAI[VIS,HPM]2 blob sn#129832 filedate 1974-11-08 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE	WIXSUB
C00004 00003	PERUSE:	0
C00008 00004	VARIAN:	0
C00010 00005	CLN:	0
C00011 00006	HIPASS:	0			HI PASS FILTERING
C00014 00007	***** SAIL INTERFACE ********
C00015 00008	
C00017 00009	PASSHI:	MOVEM	12,ACS12
C00018 00010	CLEAN:	MOVEM	12,ACS12
C00019 ENDMK
C⊗;
	TITLE	WIXSUB
	INTERN	WIND,HORWIN,VERWIN
	ENTRY	INIWIN,DOWIN,BSTCOR,CLEAN,PASSHI
	EXTERN	ROWTAB,COLTAB
WIND:	0
HORWIN:	0
VERWIN:	0
NWIN:	0
WINSIZ:	0

	MAXWID←←2000
	MAXLIN←←25
STRIP:	BLOCK	MAXWID
MAPTAB←STRIP+MAXWID/2
STRIP2:	BLOCK	MAXLIN*MAXWID

	A←ARRY2←ARRYO←BESTY←3 ↔ ARRY1←ARRY←CNT2←BESTX←4 ↔ DX1←VW←0
	B←T←16 ↔ C←TX←STRP←2 ↔ D←PT←PNT←5 ↔ TY←CNT←6
	SUMSQ←E←TXX←HC←7 ↔ PND←DX2←VC←10 ↔ PNC←X1←D1C←11
	PNE←Y1←D2C←12 ↔ PN1←X2←CNT1←13
	CC←Y2←TOP←14 ↔ DY1←POS←15 ↔ SUM←1 ↔ DL←17

	FOR I←-100,-1,1 { I*I
				}
SQRS:	FOR I←0,100,1   {I*I
				}
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13

PICWID:	0
PICLIN:	0
PICHIG:	0
PICBIT:	0
PICWIZ:	0
PICSIZ:	0

SETUP:	0
	MOVE	T,PCWD(ARRY)		;SET "GLOBALS" FOR COMPATABILITY WITH
	MOVEM	T,PICSIZ		;OLD FORMAT
	MOVE	T,LNBYA(ARRY)
	MOVEM	T,PICWIZ
	MOVE	T,BYBI(ARRY)
	MOVEM	T,PICBIT
	MOVE	T,PCLN(ARRY)
	MOVEM	T,PICHIG
	MOVE	T,LNWD(ARRY)
	MOVEM	T,PICLIN
	MOVE	T,LNBY(ARRY)
	MOVEM	T,PICWID
	JRST	@SETUP
PERUSE:	0
	MOVN	T,HORWIN
	HRRM	T,CV
	HRRM	T,CV+2
	HRRM	T,CW
	HRRM	T,CW+1
	ADDI	T,1
	HRRM	T,DV
	HRRM	T,DV+2
	HRRM	T,DW
	HRRM	T,DW+1
	ADDI	T,1
	HRRM	T,EV
	HRRM	T,EV+2
	HRRM	T,EW
	HRRM	T,EW+1
	MOVN	STRP,PICWIZ
	IMUL	STRP,WIND
	SUB	STRP,PICWIZ
	HRLZ	STRP,STRP
	HRLZ	PNT,PICBIT
	LSH	PNT,6
	ADDI	PNT,-1(ARRY)
	MOVE	CNT,[SUB T,STRIP(POS)]
	ADD	CNT,PICWIZ
	MOVEM	CNT,PP
	MOVEM	CNT,PP0
	ADDI	CNT,1
	MOVEM	CNT,PP1
	SUBI	ARRYO,1
	MOVE	VW,VERWIN
	SETZ	SUM,
VERLP:	MOVE	CNT,STRP
UNPAK:	ILDB	T,PNT
	MOVEM	T,STRIP(CNT)
	AOBJN	CNT,UNPAK
	MOVE	CNT,HORWIN
	SETZB	POS,TOP
KLP:	SETZB	HC,VC
	SETZB	D1C,D2C
	MOVE	CNT2,WIND
JLP:	MOVE	CNT1,WIND
ILP:	MOVE	T,STRIP(POS)
	SUB	T,STRIP+1(POS)
	ADD	HC,SQRS(T)
	MOVE	T,STRIP(POS)
PP:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>(POS)
	ADD	VC,SQRS(T)
	MOVE	T,STRIP(POS)
PP1:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP +<PICWID>+1
	ADD	D1C,SQRS(T)
	MOVE	T,STRIP+1(POS)
PP0:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>
	ADD	D2C,SQRS(T)
	ADD	POS,PICWIZ
	SOJG	CNT1,ILP
	AOS	POS,TOP
	SOJG	CNT2,JLP
	CAMLE	HC,VC
	MOVE	HC,VC
	CAMLE	HC,D1C
	MOVE	HC,D1C
	CAMLE	HC,D2C
	MOVE	HC,D2C
	ADD	SUM,HC
	TRZ	HC,1				;THE LOCAL MAXIMUM TEST
	MOVEI	T,1
	CAMGE	HC,(ARRYO)
	AOJA	HC,CW
	ORM	T,(ARRYO)
CV:	CAMGE	HC,HORWIN(ARRYO)		;R HALF BECOMES -<HORWIN>
	AOJA	HC,DW
	ORM	T,HORWIN(ARRYO)			;BECOMES -<HORWIN>(ARRYO)
DV:	CAMGE	HC,1+HORWIN(ARRYO)		;BECOMES 1-<HORWIN>
	AOJA	HC,EW
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EV:	CAMGE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	AOJA	HC,LOOF
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
	JRST	LOOF
CW:	CAMLE	HC,HORWIN(ARRYO)		;-<HORWIN>
	ORM	T,HORWIN(ARRYO)			;-<HORWIN>
DW:	CAMLE	HC,1+HORWIN(ARRYO)		;1-<HORWIN>
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EW:	CAMLE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
LOOF:	PUSH	ARRYO,HC
	SOJG	CNT,KLP
	SUB	PNT,PICLIN
	SOJG	VW,VERLP
	JRST	@PERUSE

VARIAN:	0

SCANS:	0
	SETZ	TX,
	SETZB	SUM,SUMSQ
	MOVE	TY,Y1
LY1:	MOVE	PT,ARRY1
	ADD	PT,ROWTAB-1(TY)
	ADD	PT,COLTAB-2(X1)
	HLL	TX,X1
LX1:	ILDB	T,PT
	ADD	SUM,T
	ADD	SUMSQ,SQRS(T)
	MOVEM	T,STRIP(TX)
	AOBJN	TX,LX1
	AOBJN	TY,LY1
	IMUL	SUM,SUM
	IDIV	SUM,DX1
	IDIV	SUM,DY1
	SUB	SUMSQ,SUM
	MOVEM	SUMSQ,VARIAN

	MOVE	TY,Y2
	SETZ	TX,
LY2:	MOVE	PT,ARRY2
	ADD	PT,ROWTAB-1(TY)
	ADD	PT,COLTAB-2(X2)
	HLL	TX,X2
LX2:	ILDB	T,PT
	MOVEM	T,STRIP2(TX)
	AOBJN	TX,LX2
	AOBJN	TY,LY2

	HLLZ	X1,X1
	HLLZ	Y1,Y1
	HLLZ	X2,X2
	HLLZ	Y2,Y2
	SUB	X2,X1
	SUB	X2,[1,,0]
	SUB	Y2,Y1
	SUB	Y2,[1,,0]
	MOVE	DL,DX2
	SUB	DL,DX1
	HRLZI	SUM,377777
	SETZ	BESTY,

	SETZ	TXX,
SCY:	HLL	TXX,X2
SCX:	SETZB	TX,BESTX
	MOVEI	T,STRIP2(TXX)
	HRRM	T,SCAX
	MOVE	TY,Y1
SCAY:	HLL	TX,X1
SCAX:	MOVE	T,STRIP2(TX)
	SUB	T,STRIP(TX)
	ADD	BESTX,SQRS(T)
	AOBJN	TX,SCAX
	ADDM	DL,SCAX
	AOBJN	TY,SCAY
	CAML	BESTX,SUM
	JRST	.+3
BTST:	MOVE	SUM,BESTX
	HRRZ	BESTY,TXX
	AOBJN	TXX,SCX
	ADD	TXX,DX1
	AOBJN	Y2,SCY
	IDIV	BESTY,DX2
	ASH	SUM,4
	IDIV	SUM,VARIAN
	JRST	@SCANS
CLN:	0
	MOVE	CNT,PICWIZ
	SUBI	CNT,2
	MOVE	A,PICHIG
	SUBI	A,2
	IMUL	CNT,A
	HRLZ	PND,PICBIT
	LSH	PND,6
	ADDI	PND,-1(ARRY)
	MOVE	PNC,PND
	ADD	PNC,PICLIN
	ILDB	B,PNC
	MOVE	PNE,PNC
	ADD	PNE,PICLIN
	ILDB	A,PNC
	MOVE	PN1,PNC
	ILDB	CC,PNC
	IBP	PND
	ILDB	D,PND
	ILDB	E,PNE
WOOP:	MOVE	C,CC
	CAMLE	B,C
	EXCH	B,C
	CAMLE	D,E
	EXCH	D,E
	CAMLE	B,D
	EXCH	B,D
	CAMLE	C,E
	EXCH	C,E
	CAMLE	C,D
	EXCH	C,D
	CAMLE	A,D
	DPB	D,PN1
	CAMGE	A,C
	DPB	C,PN1
	MOVE	PN1,PNC
	MOVE	B,A
	MOVE	A,CC
	ILDB	CC,PNC
	ILDB	D,PND
	ILDB	E,PNE
	SOJG	CNT,WOOP
	JRST	@CLN
HIPASS:	0			;HI PASS FILTERING
	MOVEI	E,1
	ASH	E,@PICBIT
	MOVE	C,E
	ASH	C,1
	SUBI	E,1
	MOVE	CNT,E
	HRRM	CNT,TABTS
	HRRM	CNT,TABTS+1
	ASH	CNT,-1
	HRRM	CNT,TABL
	MOVN	E,E
TABL:	HRREI	VW,100(E)
	CAIGE	VW,0
	MOVEI	VW,0
TABTS:	CAILE	VW,77
	MOVEI	VW,77
	MOVEM	VW,MAPTAB(E)
	ADDI	E,1
	SOJG	C,TABL
BRK:	HRL	E,ARRY1
	HRR	E,ARRY2
	MOVE	C,ARRY2
	ADD	C,PICSIZ
	SUBI	C,1
	BLT	E,(C)
	MOVN	CNT,PICWIZ
	HRLZ	CNT,CNT
	HRLZ	PNT,PICBIT
	LSH	PNT,6
	ADDI	PNT,-1(ARRY)
	MOVE	PN1,PNT
	MOVE	B,CNT
CL:	ILDB	VW,PNT
	MOVEM	VW,STRIP2(B)
	AOBJN	B,CL
	MOVE	E,WIND
	SOJLE	E,NADD
CN:	MOVE	B,CNT
CM:	ILDB	VW,PNT
	ADDM	VW,STRIP2(B)
	AOBJN	B,CM
	SOJG	E,CN
NADD:	MOVE	DL,WIND
	ASH	DL,-1
	ADD	ARRY2,COLTAB-1(DL)
	ADD	ARRY2,ROWTAB-1(DL)
	MOVE	C,WIND
	SUB	C,PICWIZ
	HRLZ	C,C
	MOVEI	VW,STRIP2
	ADD	VW,WIND
	HRRM	VW,SUMST
	MOVE	E,PICHIG
	SUB	E,WIND
CR:	SETZ	SUM,
	MOVE	B,WIND
CO:	ADD	SUM,STRIP2-1(B)
	SOJG	B,CO
	MOVE	B,C
	MOVE	PND,PICLIN
	ADDB	PND,ARRY2
CP:	MOVE	CC,WINSIZ
	IDIVM	SUM,CC
	ILDB	DY1,PND
SHFST:	SUB	DY1,CC
	MOVE	DY1,MAPTAB(DY1)
	DPB	DY1,PND
	SUB	SUM,STRIP2(B)
SUMST:	ADD	SUM,STRIP2(B)		;CHANGED TO STRIP+<WIND>
	AOBJN	B,CP
	MOVE	B,CNT
CQ:	ILDB	CC,PN1
	ILDB	VW,PNT
	SUB	VW,CC
	ADDM	VW,STRIP2(B)
	AOBJN	B,CQ
	SOJGE	E,CR
	JRST	@HIPASS
;***** SAIL INTERFACE ********

	P←17

ACS12:	0
ACS16:	0
ACS17:	0
RETAD:	0


INIWIN:	POP	P,RETAD
	POP	P,WIND
	MOVE	1,PICWID
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,HORWIN
	MOVE	1,PICHIG
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,VERWIN
	IMUL	1,HORWIN
	MOVEM	1,NWIN
	MOVE	1,WIND
	IMUL	1,1
	MOVEM	1,WINSIZ
	JRST	@RETAD

DOWIN:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRYO
	POP	P,ARRY
	MOVEM	17,ACS17
	JSR	PERUSE
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	IDIV	SUM,NWIN
	JRST	@RETAD


DAX1:	0
DAY1:	0
DAX2:	0
DAY2:	0

BSTCOR:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,DAY2
	POP	P,DAX2
	POP	P,DAY1
	POP	P,DAX1
	POP	P,ARRY2
	POP	P,Y1
	POP	P,X1
	POP	P,T
	SUBI	Y1,-1(T)
	HRRE	DY1,Y1
	MOVN	Y1,Y1
	HRLZ	Y1,Y1
	HRR	Y1,T
	POP	P,T
	SUBI	X1,-1(T)
	HRRE	DX1,X1
	MOVN	X1,X1
	HRLZ	X1,X1
	HRR	X1,T
	POP	P,ARRY1
	MOVE	Y2,@DAY2
	MOVE	T,@DAY1
	SUBI	Y2,-1(T)
	MOVN	Y2,Y2
	HRLZ	Y2,Y2
	HRR	Y2,T
	MOVE	X2,@DAX2
	MOVE	T,@DAX1
	SUBI	X2,-1(T)
	HRRE	DX2,X2
	MOVN	X2,X2
	HRLZ	X2,X2
	HRR	X2,T
	MOVEM	17,ACS17
	JSR	SCANS
DIVTT:	ADDB	BESTX,@DAX1
	ADD	BESTX,DX1
	SUBI	BESTX,1
	MOVEM	BESTX,@DAX2
	ADDB	BESTY,@DAY1
	ADD	BESTY,DY1
	SUBI	BESTY,1
	MOVEM	BESTY,@DAY2
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	JRST	@RETAD


PASSHI:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRY2
	POP	P,ARRY1
	MOVEM	17,ACS17
	JSR	HIPASS
	MOVE	17,ACS17
	MOVE	16,ACS16
	MOVE	12,ACS12
	JRST	@RETAD
CLEAN:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRY
	MOVEM	17,ACS17
	JSR	CLN
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	JRST	@RETAD



	END